home *** CD-ROM | disk | FTP | other *** search
/ World of Video / World of Video.iso / gfxprograms / 3dprograms / t3dlib / source / readwrite.c < prev    next >
C/C++ Source or Header  |  1995-02-13  |  2KB  |  91 lines

  1. /* readwrite.c - written by Glenn M. Lewis - 10/91
  2.  * convert external Turbo Silver objects into "internal" Imagine objects
  3.  * with optional "merge" feature
  4.  */
  5.  
  6. static char rcs_id[] = "$Id: readwrite.c,v 1.7 1993/01/31 17:22:21 glewis Exp $";
  7.  
  8. #include <stdio.h>
  9. #include <ctype.h>
  10. #include "t3dlib.h"
  11. #ifdef __STDC__
  12. #include <stdlib.h>
  13. #include <strings.h>
  14. #include "readwrite_protos.h"
  15. #endif
  16.  
  17. WORLD *world;
  18. extern int verbose_flag;
  19. char infile[128], outfile[128];
  20.  
  21. main(argc, argv)
  22. int argc;
  23. char *argv[];
  24. {
  25.     int i, merge_flag, tddd_flag, frame;
  26.     FILE *inp, *out, *fopen();
  27.  
  28.     merge_flag = 0;
  29.     verbose_flag = 0;
  30.     tddd_flag = 0;
  31.     infile[0] = outfile[0] = '\0';
  32.     inp = stdin;
  33.     out = stdout;
  34.     frame = -1;
  35.     for (i=1; i<argc; i++) {
  36.         if (argv[i][0] == '-') {
  37.             switch(argv[i][1]) {
  38.                 case 'f':
  39.                     if (argv[i][2] && isdigit(argv[i][2])) { frame = atoi(&argv[i][2]); break; }
  40.                     if (i+1 >= argc) goto USAGE;
  41.                     frame=atoi(argv[++i]);
  42.                     break;
  43.                 case 'm': merge_flag = 1; break;
  44.                 case 'v': verbose_flag = 1; break;
  45.                 case 'V': verbose_flag = 2; break;
  46.                 case 't': tddd_flag = 1; break;
  47.                 default: 
  48.                 case 'h':
  49. USAGE:
  50.                     fprintf(stderr,"Usage: %s [-tddd] [-merge] [-frame #] [-v|-V] [obj_in] [obj_out]\n",
  51.                         argv[0]);
  52.                     exit(-1);
  53.             }
  54.         } else if (!infile[0]) {
  55.             strcpy(infile, argv[i]);
  56.             if (!(inp = fopen(infile, "r"))) {
  57.                 fprintf(stderr, "Can't open '%s' for input.\n", infile);
  58.                 exit(-1);
  59.             }
  60.         } else if (!outfile[0]) {
  61.             strcpy(outfile, argv[i]);
  62.         } else goto USAGE;
  63.     }
  64.     if (!(world = read_World(inp))) {
  65.         fprintf(stderr, "No object to process.\n");
  66.         exit(-1);
  67.     }
  68.     if (merge_flag) merge_World(world);
  69.  
  70.     if (world && world->istg && frame>0)
  71.         load_staging_frame_objects(world, frame);
  72.  
  73.     if (outfile[0] && (world->info || world->object || !tddd_flag)) {
  74.         if (!(out = fopen(outfile, "w"))) {
  75.             fprintf(stderr, "Can't open '%s' for output.\n", outfile);
  76.             exit(-1);
  77.         }
  78.     }
  79.  
  80.     /* If frame was requested, don't write staging file. */
  81.     if (frame>0) world->istg = 0;    /* Yeah, I should free the memory */
  82.  
  83.     if (tddd_flag)
  84.         write_TDDD(world, out);
  85.     else
  86.         write_TTDDD(world, out);
  87.     free_World(world);
  88.     exit(0);
  89. }
  90.  
  91.